package br.com.treinamento.gestaoExperienciaProfissional.controller;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.treinamento.gestaoExperienciaProfissional.model.Permissao;
import br.com.treinamento.gestaoExperienciaProfissional.service.PermissaoService;
import br.com.treinamento.gestaoExperienciaProfissional.util.FacesUtil;

import com.google.common.base.Strings;

@ManagedBean
@ViewScoped
public class PermissaoController implements Serializable {

	private static final long serialVersionUID = 3302046108700528397L;

	private Permissao permissao;
	private List<Permissao> permissoes;
	private PermissaoService permissaoService = new PermissaoService();

	@PostConstruct
	public void init() {
		if (isAlteracao()) {
			alterarPermissao();
		} else {
			novaPermissao();
		}
	}

	private boolean isAlteracao() {
		String idPermissao = FacesUtil.getRequestParameter("idPermissao");
		return !Strings.isNullOrEmpty(idPermissao);
	}

	private void novaPermissao() {
		permissao = new Permissao();
	}

	private void alterarPermissao() {
		Long id = Long.valueOf(FacesUtil.getRequestParameter("idPermissao"));
		permissao = permissaoService.buscar(id);
	}

	public String salvar() {
		permissaoService.salvar(permissao);
		FacesUtil.mostrarMensagemSucesso("permissao.cadastro.sucesso");
		return "/paginas/permissao/listarPermissao";
	}

	public List<Permissao> getPermissoes() {

		if (permissoes == null) {
			atualizarPermissoes();
		}
		return permissoes;
	}

	public void excluir(Permissao permissao) {
		permissaoService.excluir(permissao);
		atualizarPermissoes();
		FacesUtil.mostrarMensagemSucesso("permissao.excluida.sucesso");
	}

	public String atualizar() {
		permissaoService.atualizar(permissao);
		FacesUtil.mostrarMensagemSucesso("permissoes.alterar.sucesso");
		return "/paginas/permissao/listarPermissao";
	}

	public Permissao getPermissao() {
		return permissao;
	}

	public void setPermissao(Permissao permissao) {
		this.permissao = permissao;
	}

	public void setPermissoes(List<Permissao> permissoes) {
		this.permissoes = permissoes;
	}

	private void atualizarPermissoes() {
		setPermissoes(permissaoService.listar());
	}

}
